#include <iostream>
#include <unistd.h>
#include <fcntl.h>

const int NUM = 3;

// 阻塞时读取
//int main()
//{
//  while(true){
//    char buffer[NUM];
//    ssize_t s = read(0, buffer, sizeof buffer - 1);
//    if(s < 0)
//    {
//      fprintf(stderr, "read failed!, erron: %d\n", errno); 
//    }
//    else{
//      buffer[s] = 0;
//      fprintf(stdout, "read succed! s: %zu, errno %d\n", s, errno);
//      write(1, buffer, s);
//    }
//  }
//  return 0;
//}

// 设置成非阻塞模式
void SetNoBlock(int fd)
{
  int fl = fcntl(fd, F_GETFL);
  if(fl < 0)
  {
    perror("fcntl");
  }

  fcntl(0, F_SETFL, fl | O_NONBLOCK);
}

// 非阻塞式读取
int main()
{
  SetNoBlock(0);

  while(true){
    char buffer[NUM];
    ssize_t s = read(0, buffer, sizeof buffer - 1);
    if(s < 0)
    {
      fprintf(stderr, "read failed!, erron: %d\n", errno); 
      sleep(2);
    }
    else{
      buffer[s] = 0;
      fprintf(stdout, "read succed! s: %zu, errno %d\n", s, errno);
      write(1, buffer, s);
    }

  }
  return 0;
}
